4-8 r磢摸

前面幾節介紹通用式,以及如何利用通用式來比對及抽取特定字串,本節將介紹如何利用通用式來進行字串的代換,主要的指令是 regexprep。例如,若要將所有「b 和 t 中間至少夾一個母音」的字串代換為 xxx,可見下列範例:

Example 1: 04-通用運算式/regExpRep01.mstr = 'I bet there is a bat in the boat!'; pat = 'b[aeiou]+t'; newStr = regexprep(str, pat, 'xxx'); fprintf('%s\n', newStr);I xxx there is a xxx in the xxx!

另一個範例,則是將一列字串中,連續出現的多個空白字元,壓縮成一個空白字元,如下:

Example 2: 04-通用運算式/regExpRep02.mstring = 'Draft beer, not people.'; pattern = '\s+'; string2 = regexprep(string, pattern, ' '); % 將多個空白壓縮成一個 fprintf('原字串:%s\n', string); fprintf('修改後:%s\n', string2);原字串:Draft beer, not people. 修改後:Draft beer, not people.

在使用 regexprep 進行字串代換的過程中, MATLAB 可以將小括弧比對到的子字串暫時儲存到變數 $1, $2, $3 等,以便於處理後再插回原字串,例如:

Example 3: 04-通用運算式/regExpRep03.mstr = 'I walk up, he walks up, we are all walking up.'; pat = 'walk(\w*) up'; newStr = regexprep(str, pat, 'sleep$1 tight'); fprintf('%s\n', newStr);I sleep tight, he sleeps tight, we are all sleeping tight.

使用類似的方法,我們也可以將一個字串的前兩個英文字對調,如下:

Example 4: 04-通用運算式/regExpRep04.mstr = 'are you ready'; pat = '^([^ ]+) +([^ ]+)'; rep = '$2 $1'; str2 = regexprep(str, pat, rep); fprintf('原字串:%s\n', str); fprintf('修改後:%s\n', str2);原字串:are you ready 修改後:you are ready

在使用 regexprep 指令時,可以在第四個輸入變數輸入其他字串,以代表不同的代換方式。例如,‘ignorecase’ 代表可以進行「大小寫不分」的比對與代換,‘once’ 代表只代換第一個比對符合的字串,其他選項請查看 regexprep 的線上支援(在 MATLAB 輸入「doc regexprep」即可顯示線上支援)。


MATLAB程式設計:進階篇